home *** CD-ROM | disk | FTP | other *** search
/ 10,000 Great Games / 10,000 Great Games.iso / Product / 66 / data1.cab / Source_Files / Src / Text.cpp < prev    next >
C/C++ Source or Header  |  2000-01-16  |  3KB  |  173 lines

  1. #include "stdafx.h"
  2.  
  3. #include <stdarg.h>
  4.  
  5. cText *texts = 0;
  6.  
  7. HFONT tinyfont = 0, normalfont = 0, largefont = 0;
  8.  
  9. cText::cText(cText **list)
  10.     add((cList **)list);
  11.     
  12.     *string = 0;     
  13.     font = normalfont;
  14.     color = RGB(255, 255, 255); 
  15.     centered = FALSE;
  16.  
  17.     rendered_image = new cImage();
  18.     rendered_bmp = 0;
  19. }
  20.  
  21. cText::~cText()
  22. {
  23.     delete rendered_image;
  24.  
  25.     if (rendered_bmp != 0)
  26.         delete rendered_bmp;
  27. }
  28.  
  29. void cText::set_text(char *_string)
  30. {
  31.     if (_string == 0 || *_string == 0)
  32.     {
  33.         *string = 0;
  34.  
  35.         set_image(0);
  36.     }
  37.     else if (!eq(_string, string))
  38.     {
  39.         strcpy(string, _string);
  40.         
  41.         render_text();
  42.     }
  43. }
  44.  
  45. void cText::set_color(int _color)
  46.     if (color != _color)
  47.     {
  48.         color = _color; 
  49.  
  50.         if (*string == 0)
  51.             set_image(0);
  52.         else
  53.             render_text();
  54.     }
  55. }
  56.  
  57. void cText::set_font(HFONT _font)
  58. {
  59.     if (font != _font)
  60.     {
  61.         font = _font;
  62.  
  63.         if (*string == 0)
  64.             set_image(0);
  65.         else
  66.             render_text();
  67.     }
  68. }
  69.  
  70. void cText::set_centered(int _centered)
  71. {
  72.     centered = _centered;
  73. }
  74.  
  75. void cText::render_text()
  76. {
  77.     HDC hdc;    
  78.     SIZE size;    
  79.     int len;
  80.  
  81.     // First delete old image
  82.  
  83.     if (rendered_bmp != 0)
  84.         delete rendered_bmp;
  85.  
  86.     // Get length of string
  87.     
  88.     len = lstrlen(string);
  89.  
  90.     // Get size of string
  91.  
  92.     if (FAILED(surface->dds->GetDC(&hdc)))
  93.         error("Unable to get device context for getting text size");    
  94.     
  95.     SelectObject(hdc, font);
  96.     GetTextExtentPoint32(hdc, string, len, &size);
  97.  
  98.     surface->dds->ReleaseDC(hdc);
  99.  
  100.     // Allocate new bitmap of correct size
  101.  
  102.     rendered_bmp = new cBMP(size.cx, size.cy, string);
  103.     rendered_image->bmp = rendered_bmp;
  104.  
  105.     // Render string
  106.  
  107.     if (FAILED(rendered_bmp->dds->GetDC(&hdc)))
  108.         error("Unable to get device context for rendering string");
  109.       
  110.     SelectObject(hdc, font);
  111.     SetBkColor(hdc, MASK_COLOR);
  112.     SetTextColor(hdc, color);
  113.     ExtTextOut(hdc, 0, 0, 0, 0, string, len, 0);
  114.  
  115.     rendered_bmp->dds->ReleaseDC(hdc);    
  116.     
  117.     // Make sure image is updated
  118.  
  119.     set_image(0);
  120.  
  121.     // Set rendered image to current image
  122.  
  123.     set_image(rendered_image);
  124.  
  125.     // Do alignment
  126.  
  127.     if (centered)
  128.         rendered_image->origin_center();
  129.     else
  130.         rendered_image->origin_lefttop();
  131. }
  132.  
  133. void init_fonts()
  134. {
  135.     tinyfont = CreateFont(14, 8, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, VARIABLE_PITCH, "Arial");
  136.  
  137.     if (tinyfont == 0)
  138.         error("Unable to create tiny font");
  139.  
  140.     normalfont = CreateFont(16, 10, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, VARIABLE_PITCH, "Arial");
  141.  
  142.     if (normalfont == 0)
  143.         error("Unable to create normal font");
  144.  
  145.     largefont = CreateFont(20, 12, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, VARIABLE_PITCH, "Arial");
  146.  
  147.     if (largefont == 0)
  148.         error("Unable to create large font");
  149. }
  150.  
  151. void deinit_fonts()
  152. {    
  153.     if (tinyfont != 0)
  154.     {
  155.         DeleteObject(tinyfont);
  156.         tinyfont = 0;
  157.     }
  158.  
  159.     if (normalfont != 0)
  160.     {
  161.         DeleteObject(normalfont);
  162.         normalfont = 0;
  163.     }
  164.  
  165.     if (largefont != 0)
  166.     {
  167.         DeleteObject(largefont);
  168.         largefont = 0;
  169.     }
  170. }
  171.